www.gusucode.com > VC++ 酒店管理系统-源码程序 > VC++ 酒店管理系统-源码程序/code/hotel2003/Page3.cpp
//Download by http://www.NewXing.com // Page3.cpp : implementation file // #include "stdafx.h" #include "qq.h" #include "Page3.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif /* * 常数定义 */ const DFrame=2; const HFrame=18; const NLengthMainFrame=80; const NLengthSubFrame=50; const nDXWIDTH=NLengthMainFrame-NLengthSubFrame; const nX=120+nDXWIDTH;//150 #include "QQView.h" #include "MainFrm.h" #include "Tools.h" ///////////////////////////////////////////////////////////////////////////// // CPage3 dialog IMPLEMENT_DYNCREATE(CPage3, CDialog) /* * 静态成员初始化 */ long CPage3::xStart=0; long CPage3::yStart=0; CPoint CPage3::pntArray[30]={CPoint(0,0)}; BOOL CPage3::bDrawTreeImage=FALSE; BOOL CPage3::bDrawFrameImage=FALSE; CPage3::CPage3(CWnd* pParent /*=NULL*/) : CDialog(CPage3::IDD, pParent) { //{{AFX_DATA_INIT(CPage3) m_ShowType = -1; //}}AFX_DATA_INIT } void CPage3::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPage3) DDX_Radio(pDX, IDC_RADIO1, m_ShowType); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPage3, CDialog) //{{AFX_MSG_MAP(CPage3) ON_BN_CLICKED(IDC_RADIO1, OnRadio) ON_BN_CLICKED(IDC_RADIO2, OnRadio) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPage3 message handlers /* * pDC: 画图的设备上下文 * rect: 画图的范围 */ void CPage3::DrawFrameImage(CDC *pDC,CRect rect) {//画公司的框架图 int nXWidth=rect.Width()/10; int nYHeight=rect.Height()/10; //构造可画图矩形区域 CRect rectDraw(rect.left+nXWidth,rect.top+nYHeight,rect.right-nXWidth,rect.bottom-nYHeight); int nDX=rectDraw.Width()/10; long XCenter=(rectDraw.left+rectDraw.right)/2; DrawRangeText(XCenter-nDX,rectDraw.top,XCenter+nDX,rectDraw.top+nDX,"酒店",pDC); } void CPage3::DrawRangeText(long x1, long y1, long x2, long y2, CString strTtext, CDC *pDC) {//在矩形区域内部画文本 //如果给定的矩形没有文本那么大,就调整矩形的大小来适应文本 CSize size=pDC->GetTextExtent(strTtext);//得到文本的大小 if(abs(x2-x1)<size.cx) { if(x1<=x2) { x2=x1+size.cx+1; } else{x1=x2+size.cx+1;} } if(abs(y2-y1)<size.cy) { if(y1<=y2) { y2=y1+size.cy+1; } else{y1=y2+size.cy+1;} } long xStart,yStart; xStart=x1+(abs(x2-x1)-size.cx)/2; yStart=y1+(abs(y2-y1)-size.cy)/2; pDC->MoveTo(x1,y1); pDC->LineTo(x2,y1); pDC->LineTo(x2,y2); pDC->LineTo(x1,y2); pDC->LineTo(x1,y1); pDC->TextOut(xStart,yStart,strTtext);// [5/22/2003] } void CPage3::OnRadio() { // TODO: Add your control notification handler code here this->UpdateData(TRUE); CQQView* pView=CQQView::GetView(); CDC* pDC=pView->GetDC(); CRect rect; pView->GetClientRect(&rect); long xstart=rect.left+(rect.Width()-350)/2; long ystart=rect.top+(rect.Height()-200)/2; if(m_ShowType==0) {//树型类型 pView->nImgTypeInView=12; pView->bFirstRun=FALSE; // pDC->FillSolidRect(rect,pDC->GetBkColor()); // [6/29/2003-9:36] // DrawTreeImage(pDC,CPoint(xstart+65,0));//画酒店树型图 bDrawTreeImage=TRUE;//画树型图 pView->Invalidate(TRUE); } if(m_ShowType==1) {//框架类型 pView->nImgTypeInView=13;//指定为框架图像类型 pView->bFirstRun=FALSE; bDrawFrameImage=TRUE; pView->Invalidate(TRUE);//引起重画 // pDC->FillSolidRect(rect,pDC->GetBkColor()); // this->DrawFrameImg(pDC,CRect(xstart,ystart,xstart+350,ystart+200)); xStart=xstart; yStart=ystart; //拷贝当前屏幕的图像为拖动或者其他的消息引起的重画情况 // ClientToScreen(&rect);//将客户区域转变成屏幕坐标 // ScreenToClient(&rect);//有些问题,拖动的时候显示的图像不正确 // pView->m_CurScreenBitmap=::GetScreenBitmap(&rect); } } void CPage3::DrawFrameImg(CDC *pDC,CRect rect) { CBitmap bitmap; bitmap.LoadBitmap(IDB_FRAMEIMG); CDC m; m.CreateCompatibleDC(pDC);//创建一个于pDC兼容的DC m.SelectObject(&bitmap); pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&m,0,0,SRCCOPY); m.DeleteDC(); } CPoint CPage3::GetImgOrgPoint() {//得到图像相对客户区的坐标 CQQView* pView=CQQView::GetView(); CDC* pDC=pView->GetDC(); return CPoint(xStart,yStart); } static LPTSTR strTextArray[]= { "酒店", "客房部", "接待", "楼层", "洗衣间", "餐饮部", "餐厅", "酒吧", "康乐部", "洗浴", "娱乐", "财务部", "购物", "库房", "收银台", NULL }; void CPage3::DrawFrameAndText(CDC *pDC, CPoint LeftTop, CPoint RightButtom, const CString &strDrawedText) { //画指定的矩形和矩形内的文本 //画矩形 pDC->MoveTo(LeftTop); pDC->LineTo(RightButtom.x,LeftTop.y); pDC->LineTo(RightButtom); pDC->LineTo(LeftTop.x,RightButtom.y); pDC->LineTo(LeftTop); //画矩形内的文本 CSize sizeText=pDC->GetTextExtent(strDrawedText); CRect FrameRect(LeftTop,RightButtom); if(FrameRect.Width()>sizeText.cx&&FrameRect.Height()>sizeText.cy) { if(!strDrawedText.IsEmpty()) { long x1=LeftTop.x+(FrameRect.Width()-sizeText.cx)/2; long y1=LeftTop.y+(FrameRect.Height()-sizeText.cy)/2; long x2=RightButtom.x-(FrameRect.Width()-sizeText.cx)/2; long y2=RightButtom.y-(FrameRect.Height()-sizeText.cx)/2; CRect rectDrawText(x1,y1,x2,y2); pDC->DrawText(strDrawedText,&rectDrawText,DT_CENTER ); } } } void CPage3::DrawTreeImage(CDC *pDC, CPoint pntStart) { pntArray[0]=CPoint(0+pntStart.x,0+pntStart.y);pntArray[1]=CPoint(100+pntStart.x,25+pntStart.y);pntArray[2]=CPoint(120+pntStart.x,50+pntStart.y); pntArray[10]=CPoint(120+pntStart.x,50+4*(DFrame+HFrame)+pntStart.y); pntArray[16]=CPoint(120+pntStart.x,50+7*(DFrame+HFrame)+pntStart.y); pntArray[22]=CPoint(120+pntStart.x,50+10*(DFrame+HFrame)+pntStart.y); for(int i=0;i<14;i++) { pntArray[3+i*2]=CPoint(pntStart.x+120+NLengthMainFrame,pntStart.y+50+HFrame+(DFrame+HFrame)*i); } for(i=0;i<3;i++) {//nX=150 pntArray[4+i*2]=CPoint(pntStart.x+nX,pntStart.y+50+(DFrame+HFrame)*(i+1)); pntArray[24+i*2]=CPoint(pntStart.x+nX,pntStart.y+50+(DFrame+HFrame)*(i+11)); } for(i=0;i<2;i++) { pntArray[12+2*i]=CPoint(pntStart.x+nX,pntStart.y+50+(DFrame+HFrame)*(i+5)); pntArray[18+2*i]=CPoint(pntStart.x+nX,pntStart.y+50+(DFrame+HFrame)*(i+8)); } for(i=0;i<15;i++) { DrawFrameAndText(pDC,pntArray[i*2],pntArray[2*i+1],strTextArray[i]); } //画直线 pDC->MoveTo((pntArray[0].x+pntArray[1].x)/2,pntArray[1].y); pDC->LineTo((pntArray[0].x+pntArray[1].x)/2,(pntArray[22].y+pntArray[23].y)/2); pDC->LineTo(pntArray[22].x,(pntArray[22].y+pntArray[23].y)/2); pDC->MoveTo((pntArray[0].x+pntArray[1].x)/2,(pntArray[2].y+pntArray[3].y)/2); pDC->LineTo(pntArray[2].x,(pntArray[2].y+pntArray[3].y)/2); pDC->MoveTo((pntArray[0].x+pntArray[1].x)/2,(pntArray[10].y+pntArray[11].y)/2); pDC->LineTo(pntArray[10].x,(pntArray[10].y+pntArray[11].y)/2); pDC->MoveTo((pntArray[0].x+pntArray[1].x)/2,(pntArray[16].y+pntArray[17].y)/2); pDC->LineTo(pntArray[10].x,(pntArray[16].y+pntArray[17].y)/2); long nSubCenterX=((pntArray[0].x+pntArray[1].x)/2+pntArray[2].x)/2; long nSubCenterY=(pntArray[2].y+pntArray[3].y)/2; pDC->MoveTo(nSubCenterX,nSubCenterY); pDC->LineTo(nSubCenterX,(pntArray[8].y+pntArray[9].y)/2); pDC->LineTo(pntArray[8].x,(pntArray[8].y+pntArray[9].y)/2); pDC->MoveTo(nSubCenterX,(pntArray[4].y+pntArray[5].y)/2); pDC->LineTo(pntArray[4].x,(pntArray[4].y+pntArray[5].y)/2); pDC->MoveTo(nSubCenterX,(pntArray[6].y+pntArray[7].y)/2); pDC->LineTo(pntArray[6].x,(pntArray[6].y+pntArray[7].y)/2); pDC->MoveTo(nSubCenterX,(pntArray[10].y+pntArray[11].y)/2); pDC->LineTo(nSubCenterX,(pntArray[14].y+pntArray[15].y)/2); pDC->LineTo(pntArray[14].x,(pntArray[14].y+pntArray[15].y)/2); pDC->MoveTo(nSubCenterX,(pntArray[12].y+pntArray[13].y)/2); pDC->LineTo(pntArray[12].x,(pntArray[12].y+pntArray[13].y)/2); pDC->MoveTo(nSubCenterX,(pntArray[16].y+pntArray[17].y)/2); pDC->LineTo(nSubCenterX,(pntArray[20].y+pntArray[21].y)/2); pDC->LineTo(pntArray[20].x,(pntArray[20].y+pntArray[21].y)/2); pDC->MoveTo(nSubCenterX,(pntArray[18].y+pntArray[19].y)/2); pDC->LineTo(pntArray[18].x,(pntArray[18].y+pntArray[19].y)/2); pDC->MoveTo(nSubCenterX,(pntArray[22].y+pntArray[23].y)/2); pDC->LineTo(nSubCenterX,(pntArray[28].y+pntArray[29].y)/2); pDC->LineTo(pntArray[28].x,(pntArray[28].y+pntArray[29].y)/2); pDC->MoveTo(nSubCenterX,(pntArray[24].y+pntArray[25].y)/2); pDC->LineTo(pntArray[24].x,(pntArray[24].y+pntArray[25].y)/2); pDC->MoveTo(nSubCenterX,(pntArray[26].y+pntArray[27].y)/2); pDC->LineTo(pntArray[26].x,(pntArray[26].y+pntArray[27].y)/2); }